/**
 * ClassName 部门管理控制器
 */
Ext.define("app.controller.StaffController",{
	
	extend:'Ext.app.Controller',
	init: function(){
		
		this.control({
			//主面板加载事件
			'center-grid':{
				close:'centerReload',
			},
			//用户密码修改窗口 提交 
			'user button[action=save]':{
				click:'saveUser',
			},
			//弹出用户信息表单供修改 弹窗 个人详情页
			'staffdetail button[action=updateStaff]':{
				click:'updateStaff',
			},
			//弹出用户密码框供修改 弹窗 个人详情页
			'staffdetail button[action=updatePwd]':{
				click:'updatePwd',
			},
			
			//弹出用户密码框供修改 弹窗 员工列表页
			'stafflist button[action=updatePwd]':{
				click:'editPwd',
			},
			
			//加载相信信息
			'staffdetail':{
				afterrender:'loadDetail',
			},
			
			//双击编辑点击的用户信息 弹窗
			'stafflist':{
				activate:'centerReload',
				itemdblclick:'editInfo',
			},
		
			//删除选中的用户信息	
			'stafflist button[action=delete]':{
				click:'deleteInfo',
			},
			//下载模板
			'stafflist button[action=download]':{
				click:'staffDownload',
			},
			//上传文件窗口 弹窗
			'stafflist button[action=import]':{
				click:'importWindow',
			},
			//批量导入员工信息  员工列表页
			'uploadwindow button[action=upload]':{
				click:'staffImport',
			},
			//批量添加信息  员工列表页
			'uploadwindow button[action=addAll]':{
				click:'staffAddAll',
			},
			//添加的用户信息 弹窗 员工列表页
			'stafflist button[action=add]':{
				click:'addinfo',
			},
				
			/*'stafflist button[id=save]':{
				click:this.saveAllInfo,
				},*/
			//保存修改好的用户信息 提交
			'staffedit button[action=save]':{
				click:'saveInfo',
			},
			//单击左侧导航栏
			'menu':{
				itemclick:'addTab',
			},
			//添加信息按钮 提交 员工列表页
			'staffadd button[action = add]':{
				click:'staffadd',
			},
			//上传图片弹出按钮 
			'staffadd filefield':{
				change:'staffuploadphoto',
			},
			'staffedit filefield':{
				change:'staffuploadphoto',
			},			
			
			//站内信列表中，双击展示该位置上的站内信详情
			'internalMsg': {
				itemdblclick: 'internalMsgLook'
			},
			//回复站内信
			'internalMsgLook button[action=reply]': {
				click: 'replyMsg'
			},
			//提交站内信的回复
			'internalMsgReply button[action=reply]': {
				click: 'postMsg'
			},
			//发送站内信
			'internalMsg button[action=sendMsg]': {
				click: 'sendMsg'
			},
			//未读站内信
			'internalMsg button[action=unreadMsg]': {
				click: 'unreadMsg'
			},
			//删除站内信，批量或者单个
			'internalMsg button[action=removeMsg]': {
				click: 'removeMsg'
			},
			//查找符合条件（标题、内容、发信人、收信人）的站内信
			'internalMsg button[action=submitSearchMsg]': {
				click: 'submitSearchMsg'
			},
			//所有站内信
			'internalMsg button[action=allMsg]': {
				click: 'allMsg'
			},
			//按时间段查找站内信
			'internalMsg button[action=submitSearchMsgDate]': {
				click: 'dateMsg'
			},
		})
	},
	
	centerReload:function(grid){					
		console.log(grid);
		var store = grid.store;
		store.load();
		/*store.on("beforeload",function(){
		    Ext.apply(store.proxy.extraParams, {});
		});*/
	},
	
	//员工列表选中员工修改密码 弹窗
	editPwd:function(btn){					
		var grid=btn.ownerCt.ownerCt;
		var rows=grid.getSelectionModel().getSelection();
		if(rows.length!=1){
			Ext.Msg.alert('警告','只能选择一行');
			return false;
		}
		var data = {};
		Ext.Array.each(rows,function(record){
			data.id = record.get('uid');
			var win = Ext.widget('user');			
			win.down("form").loadRecord(record);			
			win.show();		
		})	
	},
	
	
	//保存编辑的信息 提交
	saveUser:function(btn,e,o){
		var win = btn.up("window");
		var form = win.down('form');				
		var record = form.getRecord();
		var id = null;	
		if(record != undefined){			
			var id = record.get('uid');
		}			
		var data = form.getValues();
		data.id=id;
		var obj = {
				form : form,
				record : record,
				win : win,
				data : data,
				url : ROOT+'/index.php/Home/User/update',
				operate : 'window',
		};
		var saveAjax = new myAjax(obj)	
		saveAjax.request();				
	},
	
	//用户更改自己的密码 弹窗
	updatePwd:function(btn,opt){	
		var obj = {
				win : Ext.widget('user'),
				url : ROOT+'/index.php/Home/User/find',
				operate : 'updateSelf',
		};
		var updatePwdAjax = new myAjax(obj);
		updatePwdAjax.request();	
	},
	
	
	//更改个人信息  弹窗
	updateStaff:function(btn,opt){
		var obj = {
				win : Ext.widget('staffedit'),
				url : ROOT+'/index.php/Home/Staff/find',
				operate : 'updateSelf',				
		};
		var updateStaffAjax = new myAjax(obj);
		updateStaffAjax.request();		
	},
	
	//加载个人信息
	loadDetail:function(form,opt){
		var obj = {
				form : form,
				url : ROOT+'/index.php/Home/Staff/find',
				operate : 'loadDetail',
		};
		
		var loadDetailAjax = new myAjax(obj);
		loadDetailAjax.request();
	},
	

	//批量添加员工信息 提交
	staffAddAll:function(btn,e){
		//console.log(record);
		var hidden =Ext.getCmp('excelPath');
		var data= { 'path' : hidden.value };				
		//2.ajax后台操作
		var obj = {
				win : btn.up("window"),
				data : data,
				url : ROOT+'/index.php/Home/Staff/addAll',
				operate : 'window',
				record : Ext.getCmp('stafflist'),
		};	
		console.log(obj.record);
		var addAllAjax = new myAjax(obj);
		addAllAjax.request();		
	},
	
	importWindow:function(grid,record){
		var win = Ext.widget('uploadwindow');
		win.show();
	},
	
	//导入员工信息 弹窗
	staffImport:function(btn, e, eOpts){
		var win = btn.up("window");
		var form = win.down('form');
		var file = form.down('filefield');
		var hidden =Ext.getCmp('excelPath');
		//var hidden = form.down('hidden');
		//file.emptyText = file.getValue();
		console.log(form);
		console.log(file);
		console.log(form.ownerCt);

/*		console.log(form);
		console.log(form);*/
        if(form.isValid()){
            form.submit({
                url: ROOT+'/index.php/Home/Staff/uploadExcel',
                waitMsg: 'Uploading your excel...',
                success: function(fp, o) {
                	//console.log(fp.responseText);
                	console.log(o.response.responseText);
                	
                var response =	Ext.decode(o.response.responseText);
                hidden.setValue(response.file);
                	//win.hide();
                   Ext.Msg.alert('Success',response.msg );
                },
            
            });
        }
	},
	
	//下载信息模板
	staffDownload:function(grid,record){
		window.location=ROOT+'/index.php/Home/Staff/downloadExcel';
	},
	
	//双击编辑信息 弹窗
	editInfo:function(grid,record){
		var win = Ext.widget('staffedit');
		win.down("form").loadRecord(record);
		console.log(record);
		win.show();
	},
		
	//保存编辑的信息 提交
	saveInfo:function(btn,e,o){
		var win = btn.up("window");
		var form = win.down('form');
		var record = form.getRecord();
		var id = null;
		operate = 'updateDetail';
		if(record != undefined){			
			id = record.get('id');
			var operate = 'update';
		}		
		var data = form.getValues();
		data.id=id;
		data.photo = form.down('hidden').value;		
		var obj = {
			    form : form,
			    record : record,
				win : win,
				data : data,
				url : ROOT+'/index.php/Home/Staff/update',
				operate : operate,
		};		
		var saveAjax = new myAjax(obj)		
		saveAjax.request();				
	},
	
	//删除员工信息
	deleteInfo:function(e){		
		var grid=e.ownerCt.ownerCt;
		var rows=grid.getSelectionModel().getSelection();
		if(rows.length==0){
			Ext.Msg.alert('警告','请至少选中一行');			
		}else{
			//1.获得id
			var ids=[];
			Ext.Array.each(rows,function(record){
				ids.push(record.get('id'));
			})
			var data = {data:ids.join(',')};
			//2.ajax后台操作
			var obj = {
				rows : rows,
				st : grid.getStore(),
				data : data,
				url : ROOT+'/index.php/Home/Staff/delete',
				operate : 'del',
		};	

			var delAjax = new myAjax(obj);
			delAjax.request();

		}
		
	},
	
	
	//添加员工信息 弹窗
	addinfo:function(e){
		var win = Ext.widget('staffadd');
		win.show();		
	},
	
	//添加用户信息 提交
	staffadd : function(btn, e, eOpts){
		var obj = {
				win : btn.up("window"),
				data : btn.up("window").down('form').getValues(),
				url : ROOT+'/index.php/Home/Staff/add',
				operate : 'window',
				record : Ext.getCmp('stafflist'),
		};	
		obj.data.photo = btn.up("window").down('form').down('hidden').value;
		var addAjax =new myAjax(obj);	
		addAjax.request();  
	},
	
	//点击左边导航 右边弹窗对应的面板
	addTab:function(menu, record, item, index, e, eOpts ){
		var panel = Ext.getCmp('center-grid');
		
		var recordData = record.getData();
		
		var card ={
				title: recordData.text,				
				closable: true,
				id:recordData.alias,
				xtype:recordData.alias,
			};
		
		if(!Ext.getCmp(recordData.alias) && record.isLeaf()){
			panel.add(card);
			panel.setActiveTab(recordData.alias);
			console.log(panel);
		}else{
			panel.setActiveTab(recordData.alias);
		}
	},

	

	
	//上传图片操作
	staffuploadphoto : function(btn, e, eOpts){
		
		var form = btn.up("window").down('form');
		var file = form.down('filefield');
		var hidden = form.down('hidden');
		//file.emptyText = file.getValue();
		console.log(file);
        if(form.isValid()){
            form.submit({
                url: ROOT+'/index.php/Home/Staff/uploadphoto',
                waitMsg: 'Uploading your photo...',
                success: function(fp, o) {                	
                var response =	Ext.decode(o.response.responseText);	              
	                hidden.setValue(response.file);
	                console.log(response.file);
	                   Ext.Msg.alert('Success',response.msg );	                
                },
               failure: function(fp, o) {                	
                var response =	Ext.decode(o.response.responseText);
	                   Ext.Msg.alert('failure',response.msg );
	                }
                
            });
        }

	},
	
	//展示某个站内信的详情
	internalMsgLook: function(grid, record, item, index, e, eOpts){	
		//使用widget，总是新建一个浏览信息的window
		var internalMsgLookWin = Ext.widget('internalMsgLook', {
			title: '来自'+ record.data.fromname
		});
		internalMsgLookWin.show();
//      win.down('form').loadRecord(record);
//		console.log(record.data);就是包含站内信各种信息的对象。id、title等都在里面。
		
		//组装参数对象
		var obj = {
			win: internalMsgLookWin,
			url: ROOT + '/index.php/Home/Msg/checkContent',
			params: {id: record.data.id},//把当前双击信息id传给后台
			store: grid.getStore(),//存在该参数，表示删除操作
			func: function(resObj, win){
				//在新window上填充当前信息的标题
		    	Ext.getCmp('staff_msg_title').setData({html: record.data.title});
		    	
		    	//如果发信人就是当前登录用户，发信人突出显示
		    	if(USERNAME == record.data.fromname){
		    		//发信人突出显示
		    		Ext.getCmp('staff_msg_fromname').setData({html: '<strong style="color:red">'+ record.data.fromname +'</strong>'});
		    		//收信人
		    		Ext.getCmp('staff_msg_toname').setData({html: record.data.toname});		    		
		    		//发信人是当前登录用户，不显示'回信'按钮
		    		internalMsgLookWin.down('button[action=reply]').hide();
		    	}else{//发信人不是当前登录用户，那么收信人一定是当前用户，将收信人突出显示
		    		//发信人
		    		Ext.getCmp('staff_msg_fromname').setData({html: record.data.fromname});
		    		//收信人突出显示
		    		Ext.getCmp('staff_msg_toname').setData({html: '<strong style="color:red">'+ record.data.toname +'</strong>'});
		    		if (internalMsgLookWin.down('button[action=reply]').isHidden()) {
		    			internalMsgLookWin.down('button[action=reply]').show();
		    		}	    		
		    		
		    		//当收信人是当前用户时，双击某个信息，如果未读，则标记为已读，更换信息状态图标
		    		item.getElementsByTagName('img')[0].src = ROOT + "/Public/images/folder-skyblue.png";
		    	}
		    	//填充信息发送时间
				Ext.getCmp('staff_msg_sendtime').setData({html: record.data.sendtime});
				//填充信息详细内容，这个是双击后请求的本信息的全部内容。（信息列表里显示的只是截取的一部分）
		    	Ext.getCmp('staff_msg_content').setData({html: resObj.content});			
			}
		};
		//发送请求
		smsObj.ajax(obj);
	},
	
	//发送站内信
	sendMsg: function(){
		//新建window并显示
		Ext.widget('internalMsgReply').show();
		Ext.getCmp('textToname').hide();//隐藏组件
		Ext.getCmp('textToname').disable();//禁用组件
		Ext.getCmp('comboboxToname').show();//显示选择收信人的组件
		Ext.getCmp('comboboxToname').enable();//启用选择收信人的组件		
	},
	
	//点击‘回复’按钮，弹出回复站内信的window
	replyMsg: function(btn){
		//新建window并显示
		Ext.widget('internalMsgReply').show();
		
		//在站内信详情window销毁前和回复window显示后，得到前者的title，从中得到fromname，赋值给后者的收信人
		var title = btn.ownerCt.ownerCt.getTitle();
		
		//站内信详情中的发信人，就是回复window中的收信人
		Ext.select('input[name=toname]').elements[0].value = title.substr(2);
		//因为是直接回复的，所以收信人不允许修改
		Ext.select('input[name=toname]').elements[0].readOnly = true;
		//'回复'按钮所在的站内信详情window销毁
		btn.ownerCt.ownerCt.destroy();
	},
	
	//提交发送或者回复的站内信
	postMsg: function(btn){
		//window组件
		var win = btn.up('window');		
		//组装参数对象
		var obj = {
			form: win.down('form'),
			win: win,
			url: ROOT + '/index.php/Home/Msg/replyMsg',
			params: {},
			func: function(win, action){
				Ext.Msg.alert('恭喜', action.result.msg, function(){
					//因为在点击‘添加节点’和‘修改节点’时使用的是新建window组件，所以这里不使用hide，而是destroy或者close（默认==destroy）
					win.destroy();
				});	
			}
		};
		//提交表单
		smsObj.submit(obj);
	},	
	
	//删除站内信
	removeMsg: function(btn){
		var grid = btn.ownerCt.ownerCt;//表格面板对象
    	var rows = grid.getSelectionModel().getSelection();//所有已经选择的records
    	//如果没有选中的信息，提示
    	if(rows.length == 0){
			Ext.Msg.alert('警告','请至少选中一行');		
			return;
		}
    	//选中后删除
    	Ext.Msg.confirm('确认', '确定要删除么？' , function(btn){
    		if(btn == 'yes'){    			
    			//1.获得已选信息的所有id，数组形式
    			var ids = [];
    			Ext.Array.each(rows, function(record){
    				ids.push(record.get('id'));
    			})
    			
    			//2.ajax后台操作
    			//组装参数对象
    			var obj = {
    				url: ROOT + '/index.php/Home/Msg/removeMsg',
    				params: {ids: ids.join(',')},//类似[1,2,3]
    				store: grid.getStore(),//存在该参数，表示删除操作
    				func: function(resObj, store){
    					Ext.Msg.alert('恭喜', resObj.msg, function(){
    						store.remove(rows);
    					});				
    				}
    			};
    			//发送请求
    			smsObj.ajax(obj);
    		}
    	});			
	},

	//查找符合条件的站内信，并满足查找后的分页（分页功能针对该条件，而不是依然属于当前登录用户相关站内信的全部查找）
	submitSearchMsg: function(btn){	
		//表格面板
		var grid = btn.ownerCt.ownerCt.ownerCt;
		var store = grid.getStore();
		//表单
		var form = grid.down('form');

		//特别注意，凡是有效的条件，都是and的关系，后台sql语句需要判断。
		//如果name为keyword的input有内容并且不是空格字符串，就去找按哪种类型搜索的		
		//如果有开始时间和结束时间，就按这个指定时间段搜索
		//如果只有开始时间，则默认到现在
		//如果只有结束时间，则默认从最开始到该结束时间
		//radiogroup，默认全部
		
		//store额外传参
		var param = {};
		
		//得到keyword
		var kw = form.down('textfield[name=keyword]').getValue();
		//如果不是全空
		if(!(/^\s*$/.test(kw))){
			param.keyword = kw;
			//再得到搜索类型
			if(form.down('combobox').getValue()){
				//默认情况下，什么都不选时，是null
				param.searchType = form.down('combobox').getValue();
			}else{
				param.searchType = 1;//默认情况，什么都不选时，就是按标题搜索
			}
		}
		
		//开始时间
		param.stime = form.down('datefield[name=stime]').getValue();
		//结束时间
		param.etime = form.down('datefield[name=etime]').getValue();
		//全部还是未读
		param.msgType = form.down('radiogroup').getValue();
		// 重置start
		param.start = 0;
		//避免unreadMsg和allMsg的影响（先执行二者的任何一个或者两个，在执行搜索，发现请求参数有影响）
		param.toname = '',
	    store.loadPage(1, {params: param});
		store.on("beforeload",function(){
	        Ext.apply(store.proxy.extraParams, param);
	    });
	},

	//未读信息（是当前登录用为收信人的未读，还是当前登录用户作为收信人和发信人(对方未读)所有未读）。仅显示当前登录用户作为收信人的未读信息。
	unreadMsg: function(btn){
		//表格面板
		var grid = btn.ownerCt.ownerCt;
		var store = grid.getStore();
		store.loadPage(1, {params: {msgType: 0, toname: 'me', start: 0}});
		store.on("beforeload",function(){
	        Ext.apply(store.proxy.extraParams, {msgType: 0, toname: 'me'});
	    });

	},
	
	//所有站内信，默认就是。特别用于，当点击显示“未读”后，回到所有站内信
	allMsg: function(btn){
		//表格面板
		var grid = btn.ownerCt.ownerCt;		
		var store = grid.getStore();
	    store.loadPage(1, {params: {msgType: 1, toname: '', start: 0}});
		store.on("beforeload",function(){
	        Ext.apply(store.proxy.extraParams, {msgType: 1, toname: ''});
	    });
	},
	
	views:[	       
	       'staff.UploadWindow',
	       'staff.Area',
	       'staff.Add',
	       'staff.Edit',
	       'staff.Detail',
	       'staff.User',
	       'Menu',
	       'staff.List',
	       'staff.Add',
	       'MainLayout',
	       'staff.InternalMsg',
	       'staff.InternalMsgLook',
		   'staff.InternalMsgReply'
	       ],
	stores:[	        
	        'AreaSelectStore',
	        'AreaStore',
	        'MenuStore',
	        'StaffStore',
	        'StaffDetailStore',
	        'InternalMsgStore',
			'InternalMsgSendStore',
	        'InternalMsgSearchTypeStore'
	       ],
	//models:['StaffModel'],
})